package com.esunny.resourcevisualization.dao;

import com.esunny.resourcevisualization.domain.entity.Apply;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * @version 1.0.0.0
 * @InterfaceName ApplyDao
 * @Description 申请表操作数据库接口
 * @Author baochencong
 * @Date 2020/11/25 14:10
 */
@Mapper
public interface ApplyDao {

    /**
     * 添加申请信息
     *
     * @param apply 申请信息
     * @return 受影响行数
     */
    boolean addApplyInfo(Apply apply);

    /**
     * 通过申请id获取申请信息
     *
     * @param applyId 申请id
     * @return 申请信息
     */
    Apply getApplyInfoById(int applyId);

    /**
     * 通过id修改用户填写的信息
     *
     * @param apply 待修改信息
     * @return 修改结果
     */
    boolean updateApplyInfoById(Apply apply);

    /**
     * 通过申请id更新管理员备注和申请状态
     *
     * @param apply 待更新数据
     * @return 更新结果
     */
    boolean updateAdminRemarkAndStatusById(Apply apply);

    /**
     * 通过id更新申请状态
     *
     * @param apply 待修改信息
     * @return 更新结果
     */
    boolean updateApplyStatusById(Apply apply);

    /**
     * 通过申请id更新流程实例id和申请状态
     *
     * @param apply 待更新信息
     * @return 更新结果
     */
    boolean updateProcessInstanceIdAndStatusById(Apply apply);

    /**
     * 标记删除申请信息
     *
     * @param applyId 申请信息id
     * @return 标记结果
     */
    boolean remarkDeleteApplyInfo(int applyId);

    /**
     * 获取所有申请信息列表
     *
     * @return 申请信息列表
     */
    List<Apply> getApplyInfoList();

    /**
     * 获取使用中的资源列表
     *
     * @return 使用中的资源列表
     */
    List<Apply> getUsingApplyList();

    /**
     * 通过申请人获取申请信息列表
     *
     * @param applyBy 申请人用户名
     * @return 申请信息列表
     */
    List<Apply> getApplyListInfoByApplyBy(String applyBy);

    /**
     * 通过流程实例id获取申请信息
     *
     * @param processInstanceId 流程实例id
     * @return 申请信息
     */
    Apply getApplyInfoByProcessInstanceId(String processInstanceId);

    /**
     * 通过资源缓存id获取申请信息
     *
     * @param resourceCacheInfoId 资源缓存id
     * @return 申请信息
     */
    public Apply getApplyInfoByResourceCacheInfoId(int resourceCacheInfoId);

}
